#pragma once

#include <iostream>
#include <string>
#include <ctime>
#include <sys/stat.h>

/*
实用工具类
    a.获取当前时间
    b.判断文件是否存在
    c.获取文件路径
    d.创建目录
*/

namespace jiuqilog
{
    namespace util
    {
        class Date
        {
        public:
            static time_t now()
            {
                return time(nullptr); //返回一个时间戳
            }
        };
        class File
        {
        public:
            static bool exists(const std::string &pathname)
            {
                struct stat sa;
                if (stat(pathname.c_str(), &sa) < 0) //stat函数支持跨平台
                    return false;
                return true;
            }
            static std::string path(const std::string &pathname)
            {
                size_t pos = pathname.find_last_of("/\\"); //找到最后一个分隔符(linux下是'/',windows下是'\'),之前的就是目录
                if(pos == std::string::npos) return ".";
                return pathname.substr(0, pos+1);
            }
            static void create_directory(const std::string &path)
            {
                if(path.empty() || exists(path)) return;
                //逐级创建目录,pos记录分隔符位置,idx记录查找的起始位置
                size_t pos = 0, idx = 0;
                while(idx < path.size())
                {
                    pos = path.find_first_of("/\\", idx);
                    if(pos == std::string::npos)
                    {
                        mkdir(path.c_str(), 0777);
                    }
                    if(pos == idx) { idx = pos+1; continue; }
                    std::string parent_dir = path.substr(0, pos);
                    if(exists(parent_dir)) { idx = pos+1; continue; }
                    mkdir(parent_dir.c_str(), 0755);
                    idx = pos+1;
                }
            }
        };
    }
}